package com.solution.admin.auth.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.solution.admin.auth.dao.OrgDao;
import com.solution.admin.auth.entity.OrgEntity;
import com.solution.admin.auth.service.OrgService;
import com.solution.common.dao.BaseDao;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;
import com.solution.common.service.impl.BaseServiceImpl;
import com.solution.common.utils.string.StringUtil;

/**
 * 组织信息业务实现
 * 
 * @author diwankang
 * @version 2017年4月5日
 */
@Service
public class OrgServiceImpl extends BaseServiceImpl<OrgEntity> implements OrgService {

	@Autowired
	private OrgDao orgDao;

	@Override
	protected BaseDao<OrgEntity> getDao() {
		return orgDao;
	}

	/**
	 * 保存组织信息
	 * 
	 * @param orgEntity
	 * @return
	 * @author diwankang
	 * @date 2017年4月12日 下午2:49:38
	 * @modify solin 2017年4月21日 下午7:49:38
	 */
	@Override
	public long saveOrgInfo(OrgEntity orgEntity) {
		// 查询父节点信息
		OrgEntity parentOrg = orgDao.getOrgById(Long.parseLong(orgEntity.getParentId()));
		// 查询计算新增组织的code
		String orgCodeStr = orgDao.getMaxOrgCode(parentOrg.getOrgCode());
		if (StringUtil.isNotEmpty(orgCodeStr)) {
			// 最后两位+1
			int lastTwo = Integer.parseInt(orgCodeStr.substring(orgCodeStr.length() - 2)) + 1;
			String orgCode = orgCodeStr.substring(0, orgCodeStr.length() - 2) + (lastTwo < 10 ? ("0" + lastTwo) : lastTwo);
			orgEntity.setOrgCode(orgCode);
		} else {
			orgEntity.setOrgCode(parentOrg.getOrgCode() + "01");
		}

		if (null != parentOrg) {
			orgEntity.setOrgGrade((parentOrg.getOrgGrade() == null ? 0 : parentOrg.getOrgGrade()) + 1);
		}
		return orgDao.saveOrgInfo(orgEntity);
	}

	/**
	 * 分页查询组织信息列表
	 * 
	 * @param pageParam
	 * @param params
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午2:49:43
	 * @modify <scy> <2017年4月12日 下午2:49:43>
	 */
	@Override
	public PageBean listOrgByPage(PageParam pageParam, Map<String, Object> params) {
		return orgDao.listOrgByPage(pageParam, params);
	}

	/**
	 * 查询所有org信息
	 * 
	 * @return
	 * @exception/throws [异常类型][异常说明]
	 * @author diwankang
	 * @date 2017年4月12日 下午5:31:00
	 * @modify <scy> <2017年4月12日 下午5:31:00>
	 */
	@Override
	public List<OrgEntity> listOrg(Map<String, Object> map) {
		return orgDao.listOrg(map);
	}

	/**
	 * 取得指定经销商的岗位列表
	 * 
	 * @param dealerId
	 *            经销商ID
	 * @return 取得到岗位实体列表
	 */
	@Override
	public List<OrgEntity> listOrgByDealerId() {
		return orgDao.listOrgByDealerId();
	}

	/**
	 * 修改组织信息
	 * 
	 * @author: solin
	 * @date: 2017年4月21日 下午4:49:15
	 * @param orgEntity
	 *            组织信息实体对象
	 * @return
	 */
	@Override
	public int updateOrg(OrgEntity orgEntity) {
		return orgDao.updateOrg(orgEntity);
	}

	/**
	 * 更新组织的树形节点
	 * 
	 * @param id
	 *            组织编号
	 * @param orgName
	 *            组织名称
	 * @param parentId
	 *            上级组织编号
	 * @param status
	 *            状态
	 * @return 是否成功
	 */
	@Override
	public boolean updateTreeNode(Long id, String orgName, Long parentId, Integer status) {
		return this.orgDao.updateTreeNode(id, orgName, parentId, status);
	}

	/**
	 * 取得指定经销商的组织位列表
	 * 
	 * @param org
	 * @return
	 * @author qiaoenyin
	 * @date 2017年5月25日 上午9:50:42
	 */
	@Override
	public List<OrgEntity> listOrg(OrgEntity org) {
		return orgDao.listOrg(org);
	}
}
